<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- 1.准备好一个“容器” -->
<div id="test"></div>
<div id="test2"></div>
<div id="test3"></div>

<!-- 引入react核心库 -->
<script src="../js/react.development.js"></script>
<!-- 引入react-dom。用于支持react操作DOM -->
<script src="../js/react-dom.development.js"></script>
<!-- 引入babel，用于将jsx转为js -->
<script src="../js/babel.min.js"></script>
<!--引入prop-type，用于对组件标签属性进行限制-->
<script src="../js/prop-types.js"></script>

<script type="text/babel">
    //创建组件
    class Person extends React.Component {
        render() {
            const {name, age, sex} = this.props;
            //props只读，不可修改
            // this.props.name = 'jack' //此行代码会报错，因为props是只读的
            return (
                <ul>
                    <li>姓名：{name}</li>
                    <li>性别：{sex}</li>
                    <li>年龄：{age+1}</li>
                </ul>
            );
        }
    }

    //对标签属性进行类型、必要性的限制
    Person.propTypes = {
        //必填 字符串
        name: PropTypes.string.isRequired,//限制name必传且为字符串
        sex: PropTypes.string,//限制性别为字符串
        age: PropTypes.number,//限制年龄为数值
        speak: PropTypes.func//限制speak为函数

    };
    //    指定默认标签属性值
    Person.defaultProps = {
        sex: "男",//sex默认值为男
        age: 18//age默认值为18
    };
    //渲染组件到页面
    ReactDOM.render(<Person name="tom" age={18} speak={speak}/>, document.getElementById("test"));
    ReactDOM.render(<Person name="kate" age={18} sex="女"/>, document.getElementById("test2"));
    const p = {name: "老刘", age: 18, sex: "女"};
    // ReactDOM.render(<Person name={p.name} age={p.age} sex={p.sex}/>,document.getElementById('test3'))
    ReactDOM.render(<Person {...p}/>, document.getElementById("test3"));
    function speak(){
        console.log('我说话了');
    }
</script>
</body>
</html>